home *** CD-ROM | disk | FTP | other *** search
- *****Listing 1*****
-
-
- #include <stdio.h>
-
- main(argc,argv)
- int argc;
- char **argv;
- {
- int i;
- void crc();
-
- if (argc <= 1)
- {
- printf("USAGE:crc15 filename [filename...]\n");
- exit(1);
- }
-
- for(i=1; i < argc; i++)
- {
- printf ("\n%-s ",argv[i]);
- crc(argv[i]);
- }
- exit(0);
- } /* main */
-
- /* CRC
- * Cycric Redundancy Check
- *
- */
- void crc(argv)
- char *argv;
- {
- FILE *fd;
- int crc;
- int c;
- char crc_char;
- int crc_clear(),crc_update(),crc_finish();
-
- fd = fopen(argv,"rb");
- if(!fd)
- {
- fprintf(stderr,"Can't open %s !\n",argv);
- exit(1);
- }
- crc = crc_clear();
-
- while((c = getc(fd)) != EOF)
- {
- crc_char = c;
- crc = crc_update(crc,crc_char);
- }
-
- crc = crc_finish(crc);
- printf("%04x",crc);
- fclose(fd);
- } /* crc */
-
-
- int crc_clear()
- {
- return(0);
- }
-
- int crc_update(crc,crc_char)
- int crc;
- char crc_char;
- {
- long x;
- int i;
-
- x = ((long)crc << 8) + crc_char;
- for(i = 0;i < 8;i++)
- {
- x = x << 1;
- if(x & 0x01000000)
- x = x ^ 0x01A09700;
- }
- return(((x & 0x00ffff00) >> 8));
- }
-
- int crc_finish(crc)
- int crc;
- {
- return(crc_update(crc_update(crc,'\0'),'\0'));
- }
-